package com.yyge.config;

import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;
import java.io.IOException;


// 指定mapper接口所在的包并扫描
@MapperScan("com.yyge.mapper")
public class MybatisConfig {
    /**
     * 使用这个配置类来配置mybatis，用于替代mybatis全局配置文件
     */
    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource) throws IOException {
        //SqlsessionFactoryBean是mybatis-spring提供的类
        //用于将mybatis整合到IOC容器中
        //SqlsessionFactoryBean本身实现了FactoryBean的接口,泛型sqlsessionFactory
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        //为com.yyge.entity包中的类起别名
        sqlSessionFactoryBean.setTypeAliasesPackage("com.yyge.entity");//

        //设置数据源连接池
        sqlSessionFactoryBean.setDataSource(dataSource);
        PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();
        // classpath: 在编译后的target中的classes目录中查找mappers/*.xml
        // classpath*: 在classpath以及jar包中的其他的文件也可以导入; 因为扫描的地方比较多，所以效率有点低

        Resource[] resources = pathMatchingResourcePatternResolver.getResources("classpath*:mapper/*.xml");

        //设置mapper.xml配置文件的位置
        sqlSessionFactoryBean.setMapperLocations(resources);
        return sqlSessionFactoryBean;
    }
}
